iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0
自我挑戰組

30天打造自己的RSS閱讀器:Go語言與DevOps的實戰應用系列 第 24

Day 24:發布 RSS 閱讀器映像檔到 GitHub Container Registry

  • 分享至 

  • xImage
  •  

在前一篇文章中,我們成功為 RSS 閱讀器 API 專案建立了一個 dockerfile。今天將會探討如何在 GitHub Actions 的工作流程中發布這個 Docker 映像檔到 GitHub Container Registry。

什麼是 GitHub Container Registry?

GitHub Container Registry 是一個或容器映像檔的託管服務,它和 GitHub 平台的其他功能緊密結合。你可以將其視為它就是在做 Docker Hub 想要做到的事。

更新 GitHub Actions workflow 配置檔

來開始為我們的 GitHub Actions 配置加入一些內容。開啟專案的.github/workflows/main.yml,在已有的jobs下新增一個叫做publish的job。可以注意到我們從現在開始都是使用 self-hosted runner 了。

name: CI/CD Pipeline
on:
  push:
    branches:
      - main
jobs:
  build:
    # 中略...
  publish:
    runs-on: self-hosted
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
	  # 參考 https://github.com/marketplace/actions/docker-login#github-container-registry
      - name: Login to GitHub Container Registry
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
          
      # 參考 https://github.com/marketplace/actions/build-and-push-docker-images
      - name: Build and Push
        uses: docker/build-push-action@v4
        with:
          context: .
          push: true
          platforms: linux/arm64
          tags: ghcr.io/${{ github.repository }}:${{ github.sha }}

解釋各步驟

  • Check out code: 從 GitHub 中取得 source code。

  • Log in to GitHub Container Registry: 使用一次性 token 登入到 GitHub Container Registry。這個 token 是執行 workflow 時自動產生的。

  • Build and Push: 建立Docker image 並推送到GitHub Container Registry。注意,這裡用 ghcr.io/${{ github.repository }}/too-simple-rss-reader:SHA 作為映像檔的名稱和 tag。

最後步驟:執行!

push 到 GitHub 上,等不及要看到成功的勾勾了。

https://ithelp.ithome.com.tw/upload/images/20230927/20162813mZLz13uKES.png

...嗯?Error: buildx failed with: ERROR: denied: installation not allowed to Create organization package?

剛好有人在 GitHub 提到一樣的問題:denied: installation not allowed to Create organization package · Issue #606 · docker/build-push-action (github.com)

GITHUB_TOKEN 權限的問題,要去 repository 的 Settings > Actions > General 調整 Workflow permissions 成 Read and write permissions,也可以在 yaml 檔案指定。

https://ithelp.ithome.com.tw/upload/images/20230927/20162813xMVj4AWoRu.png

改好後重跑,成功!

https://ithelp.ithome.com.tw/upload/images/20230927/20162813uO1NUgrMWg.png

總結

今天我們在GitHub Actions中成功地新增了一個自動發布Docker映像檔到GitHub Container Registry。這將有助於我們在後續的工作中更加自動化和簡化部署過程。


上一篇
Day 23:為 RSS 閱讀器 API 寫一個 Dockerfile
下一篇
Day 25:使用nginx作為反向代理轉發Web應用程式請求
系列文
30天打造自己的RSS閱讀器:Go語言與DevOps的實戰應用30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言